/**
 * dog  不是Object实例出来的  ，考虑原型链
 * dog.__proto__->==b.prototype b是a的原型对象
 * js 中 instanceof 运算符 用于判断构造函数的prototype属性是否出现在对象的原型链的任何位置
 * @func instanceof 实现
 * @param a 实例/对象 b 对象
 * @return boolean
 */
// function myInstanceof(a,b){
//     let first=a.__proto__;
//     let second=b.prototype;
//     while(first!=null){
//         if(first==second)   return true;
//         first=first.__proto__;
//     }
//     return false;
// }


function myInstanceof(a,b){

    let proto=Object.getPrototypeOf(a);
    let prototype=b.prototype;
    while(true){
        if(!proto)  return false;
        if(proto==prototype)    return true;
        proto=Object.getPrototypeOf(proto);
    }
}

function Cat(){

}
function Dog(){//构造函数

}
//原型
Dog.prototype.sayHi=function(){

}

const   dog =new Dog();
const   cat =new Cat();
console.log(dog instanceof Dog);//原型
console.log(dog instanceof Object);//原型链 

console.log(myInstanceof(dog,Dog));//原型
console.log(myInstanceof(dog,Object));//原型
console.log(myInstanceof(dog,Cat));//原型
